// 生产环境标志
declare const production: any;

export const Method = {
    POST: 'POST', // 在服务器新建一个资源。
    GET: 'GET', // 从服务器取出资源（一项或多项）。
    PUT: 'PUT', // 在服务器更新资源（客户端提供改变后的完整资源）。
    PATCH: 'PATCH', // 在服务器更新资源（客户端提供改变的属性）。
    DELETE: 'DELETE', // 从服务器删除资源。
    HEAD: 'HEAD', // 获取资源的元数据。
    OPTIONS: 'DELETE', // 获取信息，关于资源的哪些属性是客户端可以改变的。
};

export let Static: string;
export let Host: string;

if (production) {
    Static = 'http:// 172.16.30.9:19102';
    Host = 'http:// testsso.shishike.com/cas/v1';
} else {
    Static = 'http:// 172.16.30.3:5090';
    Host = 'http:// devsso.shishike.com/cas/v1';
}

/** 定义API地址 */
export const URI = {
    system: {
        user: {
            loginTicket: `${Host}/loginTickets`,
            captchas: `${Host}/captchas`,
            login: `${Host}/login`,
            session: `${Host}/session`,
        },
    },
    member: {
        memberInfo: {
            list: `${Host}/supply/storage/dynamic-list`,
            queryOption: `${Host}/supply/storage/query-option`
        },
    }
};


/** 判断是否是绝对路径 */
const ABS_PATH = /^(http:\/\/|https:\/\/)/;

/** 定义服务器调用 */
export const myFetch = {
    fetch: function (url, ...args: any[]) {
        /** 不是绝对路径添加则添加路径前缀 */
        if (!ABS_PATH.test(url)) {
            url = `${Host}${url}`;
        }
        return fetch.apply(window as any, [url, ...args]);
    },
    get: function (url: string, params?: {}, ...others: any[]) {
        let options: any = {
            method: Method.GET,
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/x-www-form-urlencoded',
            }
        };
        let hasQuery = url.indexOf('?') !== -1;
        if (params) {
            if (others.length > 0) {
                params = others.reduce(function (result, other) {
                    return Object.assign(result, other);
                }, params);
            }
            let querys = Object.keys(params).map(key => `${key}=${params[key]}`);
            if (hasQuery) {
                url = `${url}&${querys.join('&')}`;
            } else {
                url = `${url}?${querys.join('&')}`;
            }
        }
        return myFetch.fetch(url, options);
    },
    post: function (url: string, data?: {}, ...others: any[]) {
        let options: any = {
            method: Method.POST,
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/x-www-form-urlencoded',
            }
        };
        if (data) {
            if (others) {
                data = others.reduce(function (result, other) {
                    return Object.assign(result, other);
                }, data);
            }
            options.body = JSON.stringify(data);
        }
        return myFetch.fetch(url, options);
    }
};






